package com.dlyk.manager;

import com.dlyk.DlykServerApplication;
import com.dlyk.mapper.ActivityMapper;
import com.dlyk.mapper.ProductMapper;
import com.dlyk.model.Activity;
import com.dlyk.model.Product;
import com.dlyk.model.User;
import jakarta.annotation.Resource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * Manager 层：通用业务处理层，它有如下特征：
 * 1） 对第三方平台封装的层，预处理返回结果及转化异常信息。
 * 2） 对 Service 层通用能力的下沉，如缓存方案、中间件通用处理。
 * 3） 与 DAO 层交互，对多个 DAO 的组合复用
 *
 * 这个类对应第三条，注入了多个DAO
 */
@Component
public class ClueManager {

    @Resource
    private ActivityMapper activityMapper;

    @Resource
    private ProductMapper productMapper;

    /**
     * 加载下拉选项
     */
    public Map<String, Object> getClueOptions() {

        // 从内存中获取字典数据 赋值给 下拉选项
        Map<String, Object> options = DlykServerApplication.cacheMap;

        // 负责人（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 所属活动（正在进行的活动）
        List<Activity> activityList = activityMapper.selectAllOngoingActivity();
        // 市场活动的名称会存在大量重复，为了保证唯一性，这里需要给市场活动的名称加上id
        for (Activity activity : activityList) {
            activity.setName(activity.getName() + "-" + activity.getId());
        }

        // 意向产品（在售的产品）
        List<Product> productList = productMapper.selectAllOnSaleProduct();

        options.put("owner", loginUser);
        options.put("activity", activityList);
        options.put("intentionProduct", productList);

        return options;
    }

}

